package cn.ynrcb.personnelfile.sysadmin.service;

import cn.ynrcb.personnelfile.common.utils.PageUtils;
import cn.ynrcb.personnelfile.sysadmin.entity.SysUserEntity;
import cn.ynrcb.personnelfile.sysadmin.vo.UserVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;


/**
 * 系统用户
 */
public interface SysUserService extends IService<SysUserEntity> {

    /**
     * 待审核用户分页查询
     */
    PageUtils queryAuditPage(Map<String, Object> params);

    /**
     * 机构用户分页查询，含用户名/联系电话关键字
     */
    PageUtils queryPageAdmin(Map<String, Object> params);

    /**
     * 查询用户的所有权限
     *
     * @param userId 用户ID
     */
    List<String> queryAllPerms(Long userId);

    /**
     * 查询用户的所有菜单ID
     */
    List<Long> queryAllMenuId(Long userId);

    /**
     * 用户注册
     */
    void userRegister(UserVo.UserRegisterParams params);

    /**
     * 修改用户
     */
    void update(SysUserEntity user, Integer optflag);

    /**
     * 删除用户
     */
    void deleteBatch(Long[] userIds);

    /**
     * 重置密码
     */
    void resetPassword(Long userId,String password);

    /**
     * 修改密码
     *
     * @param userId      用户ID
     * @param password    原密码
     * @param newPassword 新密码
     */
    boolean updatePassword(Long userId, String password, String newPassword);

    Map<String, String> getUserInfo(String username);

    /**
     * 忘记密码
     */
    boolean forgetPassword(UserVo.UserForgetParams params);

    /**
     * 用户绑定手机和邮箱
     *
     * @param params
     */
    void bindMobileAndEmail(UserVo.UserBindParams params);

    /**
     * 用户更换绑定手机
     *
     * @param params
     */
    void replaceBind(UserVo.UserReplaceBindParams params);

    /**
     * 根据userId获取用户的登录跳转信息
     *
     * @param userId
     */
    Integer getLoginType(Long userId, UserVo.UserLoginVo loginUser);

    /**
     * 修改用户状态-禁用/启用
     *
     * @param userId
     */
    void switchState(Long userId);

    void saveUser(SysUserEntity user);

    PageUtils querySysPage(Map<String, Object> params);

    /**
     * 修改用户锁定状态-锁定/解锁
     *
     * @param userId
     */
    void lockState(Long userId);

    SysUserEntity queryByUserName(String username);

    SysUserEntity queryByMobile(String trim);


}
